三大法人不能融資券,只能借券
這邊爬取"借券賣出"
其中有個備註欄位
上市
說明:
上櫃
註1:自101年3月19日起借券賣出餘額採用新公式計算及資訊揭露。
註2:「借券賣出當日餘額=前日餘額+當日賣出-當日還券+當日調整」數額。
註3:借券賣出股數含鉅額交易股數。
註4:「當日調整」數額:為當日櫃買市場交易類別(普通部位)、(信用部位)與(借券部位)相互調整數額,及錯帳申報等數額。
註5:「今日可借券賣出限額」:自106年2月23日起為每日盤中借券賣出委託量不得超過該種有價證券前三十個營業日之日平均成交數量之百分之三十。當發生信用額度分配時,依借券總量控管之規定產生融券限額與今日可借券賣出限額。
註6:符號說明:
• X-停券
• Y-未取得信用交易資格
• V-不得借券交易且無借券餘額停止借券賣出
• %-信用額度分配
• Z-借券賣出餘額已達總量控管標準或初次上櫃無賣出額度暫停借券賣出
註7:自103年1月6日起,證券商或期貨自營商因特定業務避險需求之借券賣出得不受每日盤中借券賣出委託額度之限制,故個股借券賣出成交數量可能大於其當日可借券賣出限額。
註8:配合台灣證券交易所標的證券維護作業系統完成之時間點,本項資訊將於每日晚間執行二次更新作業,更新時間分別約為20時30分及22時30分,實際視日結作業完成時間可能有所異動。
每日個股借券添加到stock_day
{
"_id" : "2018/10/31_0050",
"市場別" : "上市",
"產業別" : "",
"name" : "元大台灣50",
"code" : "0050",
"date" : "2018/10/31",
"成交股數" : 9898,
"成交金額" : 764366,
"開盤價" : 76.6,
"最高價" : 77.55,
"最低價" : 76.6,
"收盤價" : 77.55,
"漲跌價差" : 1.6,
"成交筆數" : 4310,
"三大法人買賣超" : -1769.0,
"外資自營商買賣超" : 0.0,
"外資自營商買進" : 0.0,
"外資自營商賣出" : 0.0,
"外陸資買賣超" : -1928.0,
"外陸資買進" : 1138.0,
"外陸資賣出" : 3066.0,
"投信買賣超" : 0.0,
"投信買進" : 0.0,
"投信賣出" : 0.0,
"自營商買賣超" : 249.0,
"自營商買賣超避險" : -90.0,
"自營商買進" : 334.0,
"自營商買進避險" : 1187.0,
"自營商賣出" : 85.0,
"自營商賣出避險" : 1277.0,
"融券今日餘額" : 1080,
"融券前日餘額" : 1056,
"融券現金償還" : 0,
"融券買進" : 49,
"融券賣出" : 73,
"融券限額" : 201500,
"融資今日餘額" : 4303,
"融資前日餘額" : 4386,
"融資現金償還" : 0,
"融資買進" : 150,
"融資賣出" : 233,
"融資限額" : 201500,
"資券互抵" : 29,
"資券註記" : "",
"借券今日可限額" : 5214.081,
"借券備註" : "",
"借券前日餘額" : 17372.0,
"借券當日調整" : 0.0,
"借券當日賣出" : 145.0,
"借券當日還券" : 0.0,
"借券當日餘額" : 17517.0
}
# -*- coding: utf-8 -*-
import json
import time
from datetime import datetime
import pandas as pd
import scrapy
from skhome.extensions import MongoDatabase
TWSE_URL = 'http://www.tse.com.tw/exchangeReport/TWT93U?response=json&date={y}{m:02d}{d:02d}'
TPEX_URL = 'http://www.tpex.org.tw/web/stock/margin_trading/margin_sbl/margin_sbl_result.php?l=zh-tw&d={y}/{m:02d}/{d:02d}'
columns = [
"_id",
"借券前日餘額",
"借券當日賣出",
"借券當日還券",
"借券當日調整",
"借券當日餘額",
"借券今日可限額",
"借券備註"
]
def parse_info(d, m):
_id = m['date'] + '_' + d[0]
note = d[-1]
d = d[8:-1]
d = [int(x.replace(',', '')) / 1000 for x in d]
d.append(note)
return dict(zip(columns, [_id, *d]))
class StockDaySpider(scrapy.Spider):
name = 'stock_security_lending'
custom_settings = {
'DOWNLOAD_DELAY': 8,
'CONCURRENT_REQUESTS': 1,
'MONGODB_COLLECTION': 'stock_day',
'MONGODB_ITEM_CACHE': 1,
'MONGODB_HAS_ID_FIELD': True,
'COOKIES_ENABLED': False
}
def __init__(self, beginDate=None, endDate=None, *args, **kwargs):
super(StockDaySpider, self).__init__(beginDate=beginDate, endDate=endDate, *args, **kwargs)
def start_requests(self):
if self.beginDate and self.endDate:
start = self.beginDate
end = self.endDate
else:
date = datetime.today().strftime("%Y-%m-%d")
start = date
end = date
for date in pd.date_range(start, end)[::-1]:
today = '{}/{:02d}/{:02d}'.format(date.year, date.month, date.day)
with MongoDatabase('stock_day') as conn:
isopen = list(conn.collection.find({'date': today}, {'_id': 1}).limit(1))
if isopen:
today = '{}/{:02d}/{:02d}'.format(date.year, date.month, date.day)
y = date.year
m = date.month
d = date.day
url = TWSE_URL.format(y=y, m=m, d=d)
time.sleep(8)
yield scrapy.Request(url, meta={'date': today, '市場別': '上市'})
y = y - 1911
url = TPEX_URL.format(y=y, m=m, d=d)
yield scrapy.Request(url, meta={'date': today, '市場別': '上櫃'})
def parse(self, response):
m = response.meta
json_data = json.loads(response.text)
try:
if m['市場別'] == '上市':
data = json_data['data']
for d in data:
yield parse_info(d, m)
else:
data = json_data['aaData']
for d in data:
yield parse_info(d, m)
except KeyError:
self.logger.info(response.url)